﻿Imports System.Resources
Imports System.Threading
Imports Biz
Imports BLL
Imports DevComponents.DotNetBar


Public Class ctrlNuevaSolicitud
    Private _llamador As frmMainMetro
    Private _bAlta As Boolean
    Private _oSolicitud As cSolicitud
    Private _RM As ResourceManager


    Public Sub SetIdioma()

        _RM = New ResourceManager("UI.Idiomas", System.Reflection.Assembly.GetExecutingAssembly)

        btnAceptar.Text = _RM.GetString("btnAceptar")
        btnCancelar.Text = _RM.GetString("btnCancelar")

    End Sub

    Public Property Llamador() As frmMainMetro
        Get
            Return _llamador
        End Get
        Set(value As frmMainMetro)
            _llamador = value
        End Set
    End Property

    Private Sub btnCancelar_Click(sender As Object, e As EventArgs) Handles btnCancelar.Click
        _llamador.CloseModalPanel(Me, DevComponents.DotNetBar.Controls.eSlideSide.Left)
    End Sub

    Private Function ValidarForm() As Boolean
        Dim bValido As Boolean = True

        If advTreeMediosBusqueda.SelectedNode Is Nothing Then bValido = False
        If dateFechaSoli.SelectedDate = Date.MinValue Then bValido = False
        If cmbPostuTDoc.SelectedIndex <= 0 Then bValido = False
        If txtPostuNroDoc.Text.Trim = "" Then bValido = False
        If txtPostuNombre.Text.Trim = "" Then bValido = False
        If datePostuFechaNac.Value = Date.MinValue Then bValido = False
        If txtPostuNacionalidad.Text.Trim = "" Then bValido = False
        If txtPostuTelefono.Text.Trim = "" Then bValido = False

        ValidarForm = bValido

    End Function

    Public Sub MostrarParaAlta(oBusqueda As cBusqueda)

        lblTituloForm.Text = "Nueva solicitud"
        lblMensajes.Text = ""

        _bAlta = True

        _oSolicitud = Nothing
        _oSolicitud = New cSolicitud
        _oSolicitud.oBusqueda.Busq_Numero = oBusqueda.Busq_Numero

        CargarComboTipoDoc()

        LlenarForm(Nothing)

        cmbPostuTDoc.Focus()

    End Sub

    Public Sub MostrarParaEdicion(oSolicitud As cSolicitud)

        lblTituloForm.Text = "Editar solicitud"
        lblMensajes.Text = ""

        _bAlta = False

        _oSolicitud = oSolicitud

        CargarComboTipoDoc()

        LlenarForm(oSolicitud)

        cmbPostuTDoc.Focus()

    End Sub

    Private Sub LlenarForm(oAux As cSolicitud)

        advTreeMediosBusqueda.Nodes.Clear()
        advTreeTiposMedioBusqueda.Nodes.Clear()

        CargarGrillaTiposMedios()

        If advTreeTiposMedioBusqueda.Nodes.Count > 0 Then advTreeTiposMedioBusqueda.SelectedIndex = 0

        If Not oAux Is Nothing Then
            PosicionarGrilla(advTreeTiposMedioBusqueda, oAux.oMedio_Busqueda.Tipo_Medio_Busqueda.TMedB_Codigo)
            PosicionarGrilla(advTreeMediosBusqueda, oAux.oMedio_Busqueda.MedB_Codigo)
            dateFechaSoli.SelectedDate = oAux.Soli_Fecha
            PosicionarCombo(cmbPostuTDoc, oAux.oPostulante.oTipo_Documento.TDoc_Codigo)
            txtPostuNroDoc.Text = oAux.oPostulante.Postu_NroDoc
            txtPostuNombre.Text = oAux.oPostulante.Postu_NombreAp
            datePostuFechaNac.Value = oAux.oPostulante.Postu_FNac
            txtPostuNacionalidad.Text = oAux.oPostulante.Postu_Nacionalidad
            txtPostuTelefono.Text = oAux.oPostulante.Postu_Telefono
            txtPostuEMail.Text = oAux.oPostulante.Postu_Mail
            txtPostuEstudios.Text = oAux.oPostulante.Postu_Estudios
            txtPostuExperiencia.Text = oAux.oPostulante.Postu_Experiencia
            txtPostuObs.Text = oAux.oPostulante.Postu_Obs
        Else
            dateFechaSoli.SelectedDate = Date.Now
            cmbPostuTDoc.SelectedIndex = 0
            txtPostuNroDoc.Text = ""
            txtPostuNombre.Text = ""
            datePostuFechaNac.Value = Date.MinValue
            txtPostuNacionalidad.Text = ""
            txtPostuTelefono.Text = ""
            txtPostuEMail.Text = ""
            txtPostuEstudios.Text = ""
            txtPostuExperiencia.Text = ""
            txtPostuObs.Text = ""
        End If

    End Sub

    Private Sub LlenarFormPostulante(oAux As cPostulante)

        If Not oAux Is Nothing Then
            txtPostuNombre.Text = oAux.Postu_NombreAp
            datePostuFechaNac.Value = oAux.Postu_FNac
            txtPostuNacionalidad.Text = oAux.Postu_Nacionalidad
            txtPostuTelefono.Text = oAux.Postu_Telefono
            txtPostuEMail.Text = oAux.Postu_Mail
            txtPostuEstudios.Text = oAux.Postu_Estudios
            txtPostuExperiencia.Text = oAux.Postu_Experiencia
            txtPostuObs.Text = oAux.Postu_Obs
        Else
            txtPostuNombre.Text = ""
            datePostuFechaNac.Value = Date.MinValue
            txtPostuNacionalidad.Text = ""
            txtPostuTelefono.Text = ""
            txtPostuEMail.Text = ""
            txtPostuEstudios.Text = ""
            txtPostuExperiencia.Text = ""
            txtPostuObs.Text = ""
        End If

    End Sub

    Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
        Dim oAux As cSolicitud


        If ValidarForm() Then
            If _bAlta Then
                oAux = New cSolicitud

                ' Solicitud
                oAux.oBusqueda.Busq_Numero = _oSolicitud.oBusqueda.Busq_Numero
                oAux.Soli_Numero = 0
                oAux.Soli_Fecha = dateFechaSoli.SelectedDate
                oAux.oPostulante.oTipo_Documento.TDoc_Codigo = cmbPostuTDoc.SelectedItem.tag
                oAux.oPostulante.Postu_NroDoc = txtPostuNroDoc.Text.Trim
                oAux.Soli_Observaciones = ""
                oAux.oMedio_Busqueda.MedB_Codigo = Utils.Convert.ToInt16(advTreeMediosBusqueda.SelectedNode.Tag)

                ' Postulante
                oAux.oPostulante.Postu_NombreAp = txtPostuNombre.Text.Trim
                oAux.oPostulante.Postu_FNac = datePostuFechaNac.Value
                oAux.oPostulante.Postu_Nacionalidad = txtPostuNacionalidad.Text.Trim
                oAux.oPostulante.Postu_Telefono = txtPostuTelefono.Text.Trim
                oAux.oPostulante.Postu_Mail = txtPostuEMail.Text.Trim
                oAux.oPostulante.Postu_Estudios = txtPostuEstudios.Text.Trim
                oAux.oPostulante.Postu_Experiencia = txtPostuExperiencia.Text.Trim
                oAux.oPostulante.Postu_Obs = txtPostuObs.Text.Trim

                Try
                    GestorSolicitud.Instance.Ingresar(oAux)
                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SolicitudAlta))

                Catch ex As Excepciones.SolicitudFalloAlta
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try
            Else
                oAux = New cSolicitud

                ' Solicitud
                oAux.oBusqueda.Busq_Numero = _oSolicitud.oBusqueda.Busq_Numero
                oAux.Soli_Numero = _oSolicitud.Soli_Numero
                oAux.Soli_Fecha = dateFechaSoli.SelectedDate
                oAux.oPostulante.oTipo_Documento.TDoc_Codigo = cmbPostuTDoc.SelectedItem.tag
                oAux.oPostulante.Postu_NroDoc = txtPostuNroDoc.Text.Trim
                oAux.Soli_Observaciones = ""
                oAux.oMedio_Busqueda.MedB_Codigo = Utils.Convert.ToInt16(advTreeMediosBusqueda.SelectedNode.Tag)

                ' Postulante
                oAux.oPostulante.Postu_NombreAp = txtPostuNombre.Text.Trim
                oAux.oPostulante.Postu_FNac = datePostuFechaNac.Value
                oAux.oPostulante.Postu_Nacionalidad = txtPostuNacionalidad.Text.Trim
                oAux.oPostulante.Postu_Telefono = txtPostuTelefono.Text.Trim
                oAux.oPostulante.Postu_Mail = txtPostuEMail.Text.Trim
                oAux.oPostulante.Postu_Estudios = txtPostuEstudios.Text.Trim
                oAux.oPostulante.Postu_Experiencia = txtPostuExperiencia.Text.Trim
                oAux.oPostulante.Postu_Obs = txtPostuObs.Text.Trim

                Try
                    GestorSolicitud.Instance.Editar(oAux)
                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SolicitudModificacion))

                Catch ex As Excepciones.SolicitudFalloEditar
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try

            End If


            _llamador.CloseModalPanel(Me, DevComponents.DotNetBar.Controls.eSlideSide.Left)
            _llamador.RefrescarGrillaSolicitudes()
        Else
            lblMensajes.Text = "Complete todos los datos requeridos..."
        End If
    End Sub

    Public Sub CargarGrillaTiposMedios()
        Dim oTipoMedioSolicitud As cTipo_Medio_Busqueda
        Dim colObjetos As Collection
        Dim oNode As DevComponents.AdvTree.Node


        advTreeTiposMedioBusqueda.BeginUpdate()

        advTreeTiposMedioBusqueda.Nodes.Clear()

        Try
            colObjetos = GestorTipo_Medio_Busqueda.Instance.Consultar

            If Not colObjetos Is Nothing Then

                For Each oTipoMedioSolicitud In colObjetos

                    oNode = New DevComponents.AdvTree.Node

                    oNode.Tag = oTipoMedioSolicitud.TMedB_Codigo
                    oNode.Text = oTipoMedioSolicitud.TMedB_Descrip

                    advTreeTiposMedioBusqueda.Nodes.Add(oNode)

                Next
            End If

        Catch ex As Excepciones.Tipo_Medio_BusquedaFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        advTreeTiposMedioBusqueda.EndUpdate()

        advTreeTiposMedioBusqueda.Refresh()

    End Sub

    Public Sub CargarGrillaMedios(iTMedB_Codigo As Int16)
        Dim oMedioSolicitud As cMedios_Busqueda
        Dim colObjetos As Collection
        Dim oNode As DevComponents.AdvTree.Node


        advTreeMediosBusqueda.BeginUpdate()

        advTreeMediosBusqueda.Nodes.Clear()

        Try
            colObjetos = GestorMedios_Busqueda.Instance.ConsultarPorTipo(iTMedB_Codigo)

            If Not colObjetos Is Nothing Then

                For Each oMedioSolicitud In colObjetos

                    oNode = New DevComponents.AdvTree.Node

                    oNode.Tag = oMedioSolicitud.MedB_Codigo
                    oNode.Text = oMedioSolicitud.MedB_Descrip

                    advTreeMediosBusqueda.Nodes.Add(oNode)

                Next
            End If

        Catch ex As Excepciones.Medios_BusquedaFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        advTreeMediosBusqueda.EndUpdate()

        advTreeMediosBusqueda.Refresh()

    End Sub

    Private Sub advTreeTiposMedioSolicitud_SelectedIndexChanged(sender As Object, e As EventArgs) Handles advTreeTiposMedioBusqueda.SelectedIndexChanged
        Dim iTMedB_Codigo As Int16

        advTreeMediosBusqueda.Nodes.Clear()

        If Not advTreeTiposMedioBusqueda.SelectedNode Is Nothing Then
            iTMedB_Codigo = Utils.Convert.ToInt16(advTreeTiposMedioBusqueda.SelectedNode.Tag)

            CargarGrillaMedios(iTMedB_Codigo)
        End If
    End Sub

    Private Sub PosicionarGrilla(gridAux As DevComponents.AdvTree.AdvTree, sTag As String)
        Dim nodeAux As DevComponents.AdvTree.Node

        If gridAux.Nodes.Count > 0 Then
            For Each nodeAux In gridAux.Nodes
                If nodeAux.Tag = sTag Then
                    gridAux.SelectedNode = nodeAux
                End If
            Next
        End If

    End Sub

    Private Sub PosicionarCombo(cmbAux As Object, sTag As String)
        Dim cmbItem As DevComponents.DotNetBar.ComboBoxItem

        If cmbAux.Items.Count > 0 Then
            For Each cmbItem In cmbAux.Items
                If cmbItem.Tag.ToString.Trim = sTag.Trim Then
                    cmbAux.SelectedItem = cmbItem
                End If
            Next
        End If

    End Sub

    Private Sub txtPostuNroDoc_LostFocus(sender As Object, e As EventArgs) Handles txtPostuNroDoc.LostFocus
        Dim oPostulante As cPostulante = New cPostulante

        oPostulante.oTipo_Documento.TDoc_Codigo = cmbPostuTDoc.SelectedItem.tag
        oPostulante.Postu_NroDoc = txtPostuNroDoc.Text.Trim

        Try
            oPostulante = GestorPostulante.Instance.Buscar(oPostulante)

        Catch ex As Excepciones.PostulanteFalloBuscar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        If Not oPostulante Is Nothing Then
            LlenarFormPostulante(oPostulante)
        Else
            LlenarFormPostulante(Nothing)
        End If
    End Sub

    Public Sub CargarComboTipoDoc()
        Dim oTipoDoc As cTipo_Documento
        Dim colObjetos As Collection
        Dim cmbItem As ComboBoxItem


        _RM = New ResourceManager("UI.Idiomas", System.Reflection.Assembly.GetExecutingAssembly)

        cmbPostuTDoc.BeginUpdate()

        cmbPostuTDoc.Items.Clear()

        cmbItem = New ComboBoxItem

        cmbItem.Tag = ""
        cmbItem.Text = _RM.GetString("strComboSeleccioneItem")

        cmbPostuTDoc.Items.Add(cmbItem)

        Try
            colObjetos = GestorTipo_Documento.Instance.Consultar

            If Not colObjetos Is Nothing Then

                For Each oTipoDoc In colObjetos

                    cmbItem = New ComboBoxItem

                    cmbItem.Tag = oTipoDoc.TDoc_Codigo
                    cmbItem.Text = oTipoDoc.TDoc_Descrip

                    cmbPostuTDoc.Items.Add(cmbItem)
                Next
            End If

            cmbPostuTDoc.SelectedIndex = 0

        Catch ex As Excepciones.Tipo_DocumentoFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        cmbPostuTDoc.EndUpdate()

    End Sub

End Class
